/**
 * Loading状态管理工具
 * 解决uni.hideLoading()在没有对应showLoading时报错的问题
 */

let loadingCount = 0;
let isLoadingShown = false;

/**
 * 显示Loading
 * @param {Object} options - loading配置选项
 * @param {string} options.title - loading文本
 * @param {boolean} options.mask - 是否显示透明蒙层
 */
export function showLoading(options = {}) {
  try {
    if (loadingCount === 0) {
      uni.showLoading({
        title: options.title || '加载中...',
        mask: options.mask !== false
      });
      isLoadingShown = true;
    }
    loadingCount++;
  } catch (error) {
    console.warn('showLoading failed:', error);
  }
}

/**
 * 隐藏Loading
 * 只有在确实显示了loading的情况下才会调用uni.hideLoading
 */
export function hideLoading() {
  try {
    loadingCount--;
    if (loadingCount <= 0) {
      loadingCount = 0;
      if (isLoadingShown) {
        uni.hideLoading();
        isLoadingShown = false;
      }
    }
  } catch (error) {
    console.warn('hideLoading failed:', error);
    // 重置状态
    loadingCount = 0;
    isLoadingShown = false;
  }
}

/**
 * 强制隐藏Loading
 * 在某些异常情况下使用，会重置所有状态
 */
export function forceHideLoading() {
  try {
    loadingCount = 0;
    if (isLoadingShown) {
      uni.hideLoading();
      isLoadingShown = false;
    }
  } catch (error) {
    console.warn('forceHideLoading failed:', error);
    loadingCount = 0;
    isLoadingShown = false;
  }
}

/**
 * 获取当前loading状态
 * @returns {Object} 包含loadingCount和isLoadingShown的状态对象
 */
export function getLoadingState() {
  return {
    loadingCount,
    isLoadingShown
  };
}

/**
 * 重置loading状态
 * 在页面卸载或异常情况下使用
 */
export function resetLoadingState() {
  loadingCount = 0;
  isLoadingShown = false;
}

// 默认导出，兼容原有的使用方式
export default {
  showLoading,
  hideLoading,
  forceHideLoading,
  getLoadingState,
  resetLoadingState
};